Centralized selection context for user interface data binding and event handling

ABSTRACT

Systems and methods are disclosed which employ a centralized selection context having selection states spread across user interface elements. Methods are described in which the binding between widgets and data storage is isolated using the centralized selection context paradigm for a majority of data items represented within a user interface. This selection context is fully accessible by methods that access data while considering the current selection context. The centralized selection context simplifies event-handling logic by having selection context readily available thus removing the need to query individual widgets for their state.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a Divisional of U.S. patent application Ser. No.12/266,478, filed Nov. 6, 2008, (Now U.S. Pat. No. 8,799,328), whichclaims the benefit of U.S. Provisional Patent Application Ser. No.60/985,962, filed Nov. 6, 2007, each of which is hereby incorporated byreference in its entirety.

BACKGROUND OF THE INVENTION

1. Field of the Invention

The present invention relates generally to methods for definingrelationships between, and operating graphical objects.

2. Description of Related Art

A user interface is a configuration of widgets conjoined with logicmanaging how each relates to data and interacts with other widgets forthe purpose of facilitating dataflow, workflow, and ultimately programflow. The purpose of a user interface (“UI”) is to provide the user withdata visualization, selection capabilities, and command mechanisms. Thecombination of these functions and how they interrelate facilitatesworkflow, dataflow, and program control flow inherent to an application.User interface widgets facilitate data representation by rendering data,editing data, and/or providing lists of data items. Many widgets areselection sensitive and provide the capability to select sets of dataitems that can then be operated on when commands are issued to do so.These commands originate from command sensitive widgets. In conventionalusage, user interface objectives and requirements may not be fullyaddressable because of the difficulty associated with meeting theseobjectives and requirements using source code.

In a conventional UI paradigm, user interface widgets are generallydivided into four types:

-   1. Visualization widgets that are typically read-only widgets that    render text, graphics, or some other representation of data;    visualization widgets generally do not allow a user to directly    modify or change displayed data.-   2. Selection-based widgets that primarily visualize selection state,    which may involve providing a visualization of data items, and may    furthermore allow manipulation of the selection state.-   3. Command-based widgets that simply inform user interface logic    that the user wants to perform a specific operation on data selected    in the current selection context.-   4. Combination widgets that provide some amount of each of the    visualization, selection-based and command-based widgets. For    example, an edit box visualizes text, allows selection thereof, and    issues commands to insert characters, delete characters, copy and    paste.

Generally speaking, most widgets have some amount of visualizationassociated with them. For the purposes of categorizing widgets, awidget's primary function determines the widget type. Table 1 lists somecommonly used widgets and their primary function:

TABLE 1 Visualization Selection Command Combination Static text Checkbox Button Edit Control (selection and command) Group box Radio buttonMenu (selection and command) Picture Combo box Custom control List boxScroll bar Slider Progress bar

A conventional UI paradigm groups all widgets into the “Command”category so that each widget issues commands and/or notificationsindicating what the widget is doing. It is then the responsibility ofthe application developer to manage these notifications in order tocreate the intended widget behavior as described by the categoriesabove. The conventional paradigm additionally includes the concept ofaggregate widgets including, for example, tab controls or propertysheets. This concept embodies an aggregation of widget primitives andwould be better described as a widget configuration rather than a widgetitself.

A commonly used conventional paradigm for selection management dependson having a distributed selection context for the UI where each widgetinternally stores and maintains the selection state relevant to thatwidget. This paradigm is used primarily because selection information isneeded during widget rendering and also when interacting with a userwhen it is desirable to have the selection information at hand withinthe widget to facilitate widget rendering and user interactions.

Furthermore, each widget has a well-defined purpose and can only displaycertain types of data resulting in a rigid interface for transferringdata to/from the widget as well as manipulation of the internalselection state. The standard set of widgets generally only supportprimitive data types such as a string, a number, etc. or collectionsthereof. A widget typically has a primary purpose of displaying data ina form understandable by a software user. Thus, each widget is typicallyconnected in some way to data storage for the purpose of displaying thatdata, which can involve writing to data storage as well as reading (inthe case of editing data).

Data storage is data having unknown structure for which the userinterface is being constructed and the structure is at least unknown toa widget toolkit builder. Since only the simplest data storage isdirectly compatible with conventional widget interfaces, a mediator isneeded to provide the “translation” and data path between widgets andtheir data storage. This data flow process between widgets and datastorage is known as data binding. To facilitate software workflow anddataflow, mediators perform a variety of tasks that can be divided intofour groups:

1. Data transfer facilitating a data path between widgets and their datasources in addition to querying widget selection states in order todecide what data to provide or otherwise access at any moment.

2. Widget event handling related to data and/or to selection context andencompassing management of widget selection state and interdependentstates of widgets; this may also include providing new data to widgetswhen a change in selection state requires different data to be displayedin any widget.

3. Widget event handling related to command and control and encompassingactions directly related to performance of operations on data by widgetsbased on the current selection context. Typically, this involvesreceiving an event and then having to query widget selection states inorder to determine how to best handle that event.

4. Miscellaneous event handling and control flow encompassing programflow, configuration changes, data management, layout resizing, and othermiscellaneous tasks most likely related to workflow, dataflow, andcontrol flow.

FIG. 1 shows how these duties relate to one another under theconventional paradigm. In general, selection-state management and datadelivery to and from widgets is handled by a mediator. Some widgettoolkits provide direct data transfer, whereby data transfer is handledindependently from the mediator, thereby alleviating some data bindingissues. However, direct data transfer still requires the mediator tomanage widget selection state for the UI.

In particular, FIG. 1 illustrates conventional data binding of widgets(101 to 104) to the data storage 110 they represent. Widgets (101 to104) are connected to data storage 110 through a process managed by themediator 105. Mediator duties 106, 107, 108, and 109 facilitatedataflow, workflow, and program flow for a user interface. The userinteracts with the widgets which send events to the mediator 105 thatare handled depending upon nature of the event. This involves managingevents related to: i) selection changes 106 and how that affects widgetsdependent on that change; ii) command, control, or program flow 107operating on selected data; iii) miscellaneous event handling andprogram flow control 108; and iv) data transfer 109 which moves databetween the widgets (101 to 104) and the data source 110 depending uponthe selection context, which is distributed among the widgets.

The main difficulty regarding the UI mediator, in terms of softwaredevelopment, lies in having to implement the logic driving widgetselection-context management and bound data. This is primarily rooted inthe conventional paradigm having a distributed selection contextrequiring the mediator to query widget selection states for nearly everylogic step.

BRIEF SUMMARY OF THE INVENTION

Certain embodiments of the present invention comprise systems andmethods address issues associated with conventional user interfaceparadigms that have a distributed selection context having selectionstates spread across user interface elements (widgets). Certainembodiments isolate the binding between widgets and data storage using acentralized selection context paradigm for a majority of data itemsrepresented within a user interface. This selection context is fullyaccessible by methods that access data while considering the currentselection context. The centralized selection context simplifiesevent-handling logic by having selection context readily available thusremoving the need to query individual widgets for their state. Inaddition, the user interface workflow graph can be derived from theselection set definitions.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 illustrates conventional data binding and selection managementprocess using a mediator;

FIG. 2 depicts conventional data binding process between widgets anddata storage;

FIG. 3 shows conventional data binding process in terms of selectionstate management;

FIG. 4 shows an alternative conventional data binding process usingdirect data binding to data storage;

FIG. 5 illustrates the use of both centralized selection context anddirect data binding according to certain aspects of the invention;

FIG. 6 depicts a data binding process according to certain aspects ofthe invention;

FIG. 7 illustrates an ideal sample UI for selecting a page within abook;

FIG. 8 depicts a selection dependency graph;

FIG. 9 illustrates an non-ideal sample UI for selecting a page within abook;

FIG. 10 depicts graph node ordering for a selection dependency graph;

FIG. 11 illustrates workflow graphs derived from selection dependencygraphs for both sample bookshelf UIs;

FIG. 12 depicts the steps required to determine a workflow graph for agiven UI layout in certain embodiments of the invention;

FIG. 13 illustrates a process for determining a file formatspecification and source code implementation of the specification;

FIG. 14 illustrates manual determination of file format specificationscompared to automated specification determination;

FIG. 15 illustrates a system level view indicating where an automatedprocess can be inserted.

DETAILED DESCRIPTION OF THE INVENTION

Embodiments of the present invention will now be described in detailwith reference to the drawings, which are provided as illustrativeexamples so as to enable those skilled in the art to practice theinvention. Notably, the figures and examples below are not meant tolimit the scope of the present invention to a single embodiment, butother embodiments are possible by way of interchange of some or all ofthe described or illustrated elements.

Certain embodiments of the invention employ methods and systems thatfacilitate the creation and operation of a user interface consistentwith user objectives and requirements. Data visualization, selectioncapabilities, command mechanisms, methods and systems are provided toenable improved workflow, dataflow, and program control flow inherent inan application.

As used herein, “user interface” or “UI” means the human-computerinterface allowing the computer user to interact with computer software.As used herein, “widget” or “user interface element” means a visualobject representing some sort of data item the user can interact with onthe computer monitor through the use of a keyboard, mouse, or some othermeans. Well known user interface widgets are: button, listbox, combobox,tree, menu, scrollbar, etc. As used herein, “data source/storage” meansa container for the data displayed by a widget usually manifesting asmemory during program runtime but could be resident in permanentstorage. As used herein, “data binding” encompasses the implementationof the data flow between a widget and the data source or sources itrepresents. As used herein, “selection” or “selection state” means thedynamic state of chosen sets or subsets of data for visual depiction orupon which to perform operations. As used herein, “selection context”means the collection of multiple selection states. As used herein,“workflow” describes how a user traverses a user interface in terms ofwhich widgets are interacted with and when, how often, the screen spacetraversed between widgets, and how this changes throughout a softwaresession. As used herein, “Mediator” is a set of logic rules determininghow to respond to, handle events or actions, and routing data flowbetween a variety of otherwise incompatible software components, such aswidgets and data sources. As used herein, “Widget Toolkit Builder” meansthe provider or developer of a software development kit (SDK) supportinga generic set of widgets that an application developer can use to buildsoftware products/applications. As used herein, an “Applicationdeveloper” is a software developer responsible for designing andassembling a software product using available tools in order to create aparticular workflow and dataflow in order to solve a particular problemor provide a particular service. As used herein, the terms “implement”or “implementation” are used primarily to describe the process ofconverting a concept, behavior, or feature into program source code.

A user interface is a configuration of widgets conjoined with logicmanaging how each relates to data and interacts with other widgets forthe purpose of facilitating dataflow, workflow, and ultimately programflow.

FIG. 2 depicts one example of a mediator and illustrates the mediator'srole in a data binding process. The flowchart in FIG. 2 highlights whenthe mediator crosses widget and data storage boundaries. Such boundarycrossing typically involves substantial complexity of implementation.Thus, FIG. 2 shows the general steps needed to implement a data bindingprocess.

FIG. 2 describes an example of interplay between widgets 20, mediator21, and data storage 22. The mediator 21 first creates the widgets 201and fetches data 202 that the widgets will display. Data storage isaccessed 203 to obtain the widget data that is then processed by themediator (to make the data compatible with each widget) and subsequentlyprovided to the widgets 204. Each widget stores a local copy of theprovided data 205. The mediator then sets the initial selection for eachwidget 206 and the widgets subsequently store this selection internally207. In certain embodiments, control is passed to an executive pendinginput or the occurrence of an event 208. Subsequently, a series ofevents may occur, typically initiated by a user, and the executive maycause the event to be processed and/or may initiate a response to theevent. In the example of FIG. 2, widget events are described as well asthe operation of mediator 21 in handling those events.

Thus, when a widget event occurs 212, the mediator 21 typically queriesthe widget selection context 213 and retrieves the selection from thewidgets 214 in order to appropriately handle the event 215. To handlethe event, the mediator may determine if the event modifies data storagein any way 216. If modification is indicated 217, then data can be reador written to data storage 218. If modification is not indicated 219,the mediator then may determine if the selection context has changed 220in such as way that dependent widgets require new data. Otherwise 221,control may be returned to the executive 208. Where widgets need newdata 222, the mediator can again fetch data 223 from data storage 224and subsequently process and provide the data 225 to the widgets. Thewidgets may then store new data 226, including overwriting or modifyingexisting data. Finally, the mediator may update the selection contextfor widgets that have changed 227 and the widgets subsequently store thenew selection. The control may be returned to the executive 208.

FIG. 3 illustrates a simplified process wherein the componentsresponsible for boundary crossings and their relation are represented towhere the selection context is maintained. The mediator is provided inthe middle of the dataflow between widget and its data storage. Whenpositioned so, the mediator can facilitate data transfer between widgetand corresponding data in addition to managing widget selection state inconjunction with the widgets.

More specifically, FIG. 3 shows a graphical representation of theprocess in the example shown in FIG. 2. Each widget 301 maintains itsown selection state 302. The mediator 304 must first query 303 selectionstates 302 through the widgets 301 in order to access the appropriatedata 305 in the data storage 306. Querying of selection state 302 istypically limited to queries communicated through the widget 301. Whendata storage 306 needs context information, the mediator may query thewidgets for selection state and then provide the results to data storage306 to enable access to the appropriate data based on the context.

FIG. 4 illustrates one example addressed to user interface toolkits thatallow direct connection of widgets to their data storage. Direct databinding alleviates some data transfer issues but still requires mediatorinvolvement in order to manage the overall selection context so that theappropriate data can be accessed. FIG. 4 shows the conventional databinding process when using direct data binding. Each widget 402maintains its own selection state 401 and additionally has a componentto access 403 the connected data storage 407 directly (for reading orwriting data). However, in order to access the appropriate data, whichdepends on the selection context for the software, data storage 407 mustquery selection states through the mediator 405. The mediator 405subsequently queries 404 selection state 401 through the widgets 402 andprovides the results back to data storage 407.

Table 2 categorizes certain user interface toolkits and theircorresponding primary data binding methods:

Direct Data Binding Conventional Data Binding (distribute selection(distribute selection context) context) Macintosh API, Carbon (AppleCorp.) QT (cross platform) Windows API, WinAPI, Win32 (Microsoft Corp.)Xaw, Motif, GTK+, (X Windows platform) FLTK (cross platform) wxWidgets(cross platform)Although other toolkits are commercially available, most are derivativesof those listed in Table 2. For example, MFC is based on Win32 and Cocoais based on Carbon, thereby sharing the same data binding and selectionparadigms. Additionally, toolkits for languages such as Java are foundedon conventional data binding and distributed selection principles. Thus,the particular language of implementation is irrelevant.

It will be appreciated that some amount of direct data binding can beimplemented in any widget toolkit. However, most widget toolkits are notdesigned to use direct binding, with the exception of QT. Additionally,it will be appreciated that all widget toolkits in Table 2 utilize adistributed selection context: i.e., every widget contains its ownselection state internally and the mediator must explicitly query thestate when making decisions.

In certain embodiments, a data binding paradigm includes centralizinguser interface selection context. This centralization permits theselection context to be fully accessible to the widgets, data storage,and mediator. Furthermore, the use of direct data binding yields apowerful, yet easy to use, data binding system, as demonstrated in FIG.5 which shows data binding with a centralized selection context 503.Each widget 501 no longer maintains the selection state relevant to thatparticular widget. All selection context is centralized 503 such that ifa widget needs to access or modify the selection state relevant to thatwidget, it must access/update the centralized selection-state repository503. When a widget 501 accesses data 502, data storage 505 can directlyquery 504 any needed selection context information without having todirectly interact with the mediator 506 or any of the widgets 501. Themediator is still involved in miscellaneous tasks such as creation,connection, and destruction, but plays little or no part in the dataflow between widgets 501 and data storage 502 during the softwaresession and is certainly not required to do so as it is in theconventional paradigm.

In certain embodiments, the mediator can be removed from a data-bindingloop provided in conventional paradigms. Such removal is facilitated bypermitting the selection context to be freely queried by data storageand allowing free updates and querying by widgets without relying on themediator.

In certain embodiments then, widgets can communicate directly with theselection context in order to update selection changes resulting fromuser interaction and can furthermore query the selection context ontheir own prior to rendering to insure they render the proper state. Adata-access interface can be primarily based on the required interfacefor each particular widget because each widget is typically limited torendering finite data types. When the widget needs to be filled withdata, it typically inquires across the data-access interface to the datastorage, which in turn queries the selection context in order todetermine the appropriate data to give to the widget.

The mediator may remain involved in creation, destruction, and othermanagement tasks unrelated to data transfer. The mediator can stillaccess the widgets, data storage, and central selection context asrequired but it is not necessary that the mediator participates in databinding at the same level as it is in conventional paradigms.

Referring now to FIG. 6, an example is provided that demonstrates howperformance of data binding steps related to selection management can bemoved from the mediator into both widgets and data storage when using acentralized selection context. As a result, selection management can beremoved from the mediator and handled primarily by widgets themselves.Selection state can be maintained in a central location rather than in adistributed manner at each widget. Consolidation of the selectioncontext allows the entire context to be queried more easily thanindividually querying each widget to obtain distributed information.Consolidation also permits the entire context to be easily accessed fromvarious components including software components that do not normallyhave direct access to such information. For example, data storage caninternally query the centralized context and directly obtain selectionstate information needed to access selected data items.

In FIG. 6, the steps shown in FIG. 2 and related to data binding thatare performed by the mediator are changed when using a centralizedselection context combined with direct data binding. Initially, themediator creates the widgets 601 and subsequently connects each widgetto the data storage and/or selection state it represents 602. Thecentral selection context 63 is created 603 and the initial state is setwithin this context. Control is then passed to an executive 604 whichmay be implemented, for example, in a software main loop or through somecombination of hardware and software. Miscellaneous events 607 arehandled by the mediator 608 and then control is returned to theexecutive 604. Under this scheme, widgets handle selection managementinternally as opposed to the conventional paradigm which requires themediator to manage selection. Additional widget functionality managesselection state and data binding for that widget. When widget eventsoccur 605, the widget first determines if this event modifies, or hasmodified, the selection state. Where modification is indicated at 609,the widget queries or updates the centralized selection contextdepending upon the nature of the event. If the data requires updating612, then the widget may fill itself with data 615. This is achieved byquerying the data access interface, which internally queries 616 thecentralized selection context in order to determine the appropriate datato access. Data storage 62 can then access the data internally andprepare 618 it for use by the widget. The widget receives the data 619and subsequently stores or renders it prior to returning to the eventloop.

In certain embodiments, a simplified mediator is provided for use with acentralized selection context. The simplified mediator can be obtainedby reducing complex logic required to bind widgets to their data becausethis process has essentially been split and moved into the widgets anddata sources. Additionally, the centralized selection context need onlymanage selection state and is simple in design. It will be appreciatedthat, under this paradigm, widgets and data sources are required toprovide additional functionality to substitute functionality that waseliminated from the mediator.

In one example, additional widget functionality includes:

1. Handling its events internally.

2. Filling itself with data.

3. Updating the centralized selection context.

4. Querying the centralized selection context.

In this example, additional data source or data storage functionalityincludes:

-   -   1. Exposing an interface for transferring data to/from widgets.    -   2. Querying the centralized selection context in order to        determine the correct data to provide to a widget.

In certain embodiments, increases in widget complexity can be mitigatedby the well-defined role of each widget. Thus, the finite amount oflogic needed for each widget can be managed by the toolkit builderrather than by the application developer, thereby greatly simplifyingapplication development processes. The complexity of data sourcesslightly increases under this model since the developer must provide aninterface through which the widget can communicate with it. Althoughsuch logic previously existed in the mediator, the relocation of datagathering to the data source (i.e., the process of preparing data fortransferring to or processing received data from the widget) can greatlysimplify the gathering process because the data source itself has fullknowledge of the potentially complex data structure it represents. Thus,the data source can easily determine an order to data based on contextand the structure of data objects without needing to interrogate datasources in order to access their internal data structures.

Example User Interface Implementation for Selecting a Book

FIG. 7 shows an example user interface allowing the selection of a pagewithin a book at a particular house. FIG. 7 shows a user interfaceallowing the selection and subsequent display of a page in a book. Thehouse widget 71 first selects the house in which to narrow down whichbook the user wants to read. The bookshelf widget 72 chooses one of thebookshelves in the house. The book widget 73 chooses a book on theshelf. The page widget 74 chooses one of the pages in the book that issubsequently displayed in the preview widget 75. Note that the itemsdisplayed in each widget are dependent upon the selection of that to itsleft.

The conventional paradigm stores selection context for each widgetinside the widget itself. When the widget subsequently changes selectionstate, the mediator must detect this change and provide correct data forthe new context to the dependent widgets (see the flowchartdemonstrating this process in FIG. 2). Under a centralized contextparadigm provided in certain embodiments of the invention, themediator's data binding responsibilities are substantially reduced andthe remaining responsibilities can be described in pseudo code, asdemonstrated in the following example. The user interfaces that benefitmost from the centralized selection context paradigm are those thatrepresent multi-level (or nested) data structures. In contrast,conventional user interfaces are better suited for flat data structuressuch as:

class Person { public: std::string m_strFirst; std::string m_strMiddle;std::string m_strLast; std::string m_strStreet; std::string m_strCity;std::string m_strState; std::string m_strZIP; std::string m_strPhone; };

The match with flat data structures arises because only one level ofselection indirection exists. In the example, the Person object itself.For a bookshelf, multiple levels of selection must be traversed in orderto arrive at the page text. Traversing selection levels may representthe major difficulty in implementing conventional user interfaces sincethere is no supporting mechanism to easily keep track of the multipleselection levels as well as providing this information to the componentsthat need it. The centralized selection context allows this informationto be readily available making this process much easier to implement.The centralized selection context is (usually) comprised of severalselection sets. Each selection set represents a group of similar dataitems that are displayed by the user interface. Selection sets aretypically a result of the data structure being represented by the userinterface.

Pseudo code for the data structure of the bookshelf example is:

Object Page { Text } Object Book { Title and a Vector of Page Objects }Object Bookshelf { Location and a Vector of Book Objects } Object House{ Homeowner and a Vector of Bookshelf Objects } Object AvailableHouses {Vector of House Objects }The same data structures in a C++ implementation are given by:

class Page { public: std::string m_strText; }; class Book { public:std::string m_strTitle; std::vector< Page > m_vPages; }; class Bookshelf{ public: std::string m_strLocation; std::vector< Book > m_vBooks; };class House { public: std::string m_strHomeowner; std::vector<Bookshelf > m_vBookShelves; }; class AvailableHouses { public:std::vector< House > m_vHouses; };In this case, four levels of selection are traversed to arrive at thepage text: house, bookshelf, book, and the page itself.

For the purposes of description, the following terms will be used inorder to implement a centralized-selection user interface paradigm:

-   -   1. Datum. An individual piece of data that is represented in        some way by the user interface. A unique identifier (the datum        handle) and a name identify a datum and is referenced by:        DATUM(name).    -   2. SelectionSet. A set of datum handles (HDATUM) identified by a        unique identifier and a name. This set can contain zero or more        datum handles. A range may also be specified during        initialization. A selection set is referenced by:        SELECTIONSET(name).    -   3. Command. Invokes an operation on selected data items or        performs some other control flow operation, is identified by a        unique identifier and name, and is referenced by: COMMAND(name).        In this example, commands are not used but described here for        completeness.    -   4. SelectionContext. A collection of selection sets. This        represents the centralized context and all selection information        is contained within.    -   5. HDATUM. Represents an index or handle to a particular Datum        and is the data type used internally within selection sets to        keep track of which items are selected. An array index is a good        example of this data type and how it is used.

Each of the operators DATUM, SELECTIONSET, and COMMAND are a functionthat converts the name into the unique identifier. It can also beassumed that passing the same name to different operators results indifferent identifiers such that DATUM(name) does not equalCOMMAND(name). Additionally, there exist declaration versions of each ofthese: DATUM_DECLARATION, SELECTIONSET_DECLARATION, andCOMMAND_DECLARATION. These are used to declare the entity itself for usewithin a program.

The list widgets in this example simply display a list of strings fromwhich the user selects in order to modify the selection context. Thedata transfer in this case can be implemented using the followinginterface:

class IDataSelectionAccess { public:  virtual bool GetSelectionItems(const SelectionContext &context, const SelectionSet &sel, std::vector<std::pair< HDATUM, std::string > > &vItems)const;In which case, upon return of the call to GetSelectionitems( ), vItemsis filled with the list of strings to be displayed. Additionally, ahandle can be associated with each string and used to represent thatparticular string datum if the user selects it in the widget.

The preview widget displays text in this example and the data transferfor this widget can be implemented using the following interface:

class IDataAccess { public: virtual bool Get(const SelectionContext&context, const Datum &datum, std::string &data)const; virtual boolSet(const SelectionContext &context, const Datum &datum, conststd::string &data); };In which case, upon return of the calls to Set( ) or Get( ) data iseither written or read to data storage. The data in this case istransferred using the parameter “data.” Subsequently, a list widget canbe bound to a particular selection set and data storage in the followingmanner:

class ListWidget { public: virtual void Bind(  const SelectionContext&context,  const SelectionSet &sel,  const IDataSelectionAccess &access) { m_pContext  = &context; m_SelSet = sel; m_pAccess  = &access;  }protected:  const SelectionContext *m_pContext;  SelectionSet  m_SelSet; const IDataSelectionAccess *m_pAccess; };Thus, when a list widget needs to fill itself with data, it need onlycall GetSelectionitems( ) on the bound data access pointer m_pAccess. Tomake this call, it passes the bound selection context as well as theselection set it is querying. It can then use the resulting list todisplay the data.

The preview widget can be bound to a datum and data storage in thefollowing manner:

class PreviewWidget { public: virtual void Bind(  const SelectionContext&context,  const Datum &datum,  const IDataAccess &access)  { m_pContext= &context; m_Datum = datum; m_pAccess = &access;  } protected:  constSelectionContext *m_pContext;  Datum  m_Datum;  const IDataAccess*m_pAccess; };In this example, since the preview widget is read-only, only the Get()method (defined by the IDataAccess interface) is used by the previewwidget.

Using these constructs, the bookshelf data structures, which constitutethe data storage in this example, can be supplemented in the followingway to apply the centralized selection paradigm to this example:

class Page : public IDataAccess { public:  DATUM_DECLARATION(Text); //Used to access m_strText  virtual bool Get(...)const; std::stringm_strText; }; class Book : public IDataSelectionAccess, publicIDataAccess { public:  SELECTIONSET_DECLARATION(Page); // Used to accessm_vPages  virtual bool GetSelectionItems(...)const;  virtual boolGet(...)const; std::string m_strTitle; std::vector< Page > m_vPages; };class Bookshelf : public IDataSelectionAccess, public IDataAccess {public:  SELECTIONSET_DECLARATION(Book); // Used to access m_vBooks virtual bool GetSelectionItems(...)const;  virtual bool Get(...)const;std::string m_strLocation; std::vector< Book > m_vBooks; }; class House: public IDataSelectionAccess, public IDataAccess { public: SELECTIONSET_DECLARATION(Shelves);// Used to access m_vBookShelves virtual bool GetSelectionItems(...)const;  virtual bool Get(...)const;std::string m_strHomeowner; std::vector< Bookshelf > m_vBookShelves; };class AvailableHouses : public IDataSelectionAccess, public IDataAccess{ public:  SELECTIONSET_DECLARATION(House); // Used to access m_vHouses virtual bool Get(...)const;  virtual bool GetSelectionItems(...)const;std::vector< House > m_vHouses; };

In certain embodiments of the invention, a mediator may require thatfour selection sets be created to represent the four selection levels inthis data structure in order to initialize the centralized selectioncontext. In C++/pseudo-code this is:

SelectionContext context; context.Create( SELECTIONSET(House) );context.Create( SELECTIONSET(Bookshelf), SELECTIONSET(House) );context.Create( SELECTIONSET(Book), SELECTIONSET(Bookshelf) );context.Create( SELECTIONSET(Page), SELECTIONSET(Book));

The create method creates the selection set passed as the firstparameter and also establishes a dependency on the second parameter ifone exists. This manages invalidation of dependent selection sets when aparent changes state, for example, the selected bookshelf must beinvalidated when the selected house changes since the bookshelf is nolonger in context.

The widgets can be bound to the selection context and data storage inthe following manner:

AvailableHouses houses; // Data storage ListWidget listHouses,listBookshelves, listBooks, listPages; PreviewWidget preview;ListHouses.Bind(context, SELECTIONSET(House), houses );listBookshelves.Bind(context, SELECTIONSET(Bookshelf), houses );listBooks.Bind(context, SELECTIONSET(Book), houses );listPages.Bind(context, SELECTIONSET(Page), houses );preview.Bind(context, DATUM(Text), houses );

At this point, the selection set dependency has been established as wellas how widgets are bound to it and the data storage. These relationshipsare shown in FIG. 8 which shows relationships of data storage 80 towidgets 81 and the centralized selection context 82. Each widget 802-806is attached directly to the top-level data storage object called houses801. Additionally, each widget is attached to the selection sets 807-810that they manipulate. Arrows going from a selection set to a widgetindicate that the widget's content is dependent on that selection state,for example, the list of books 804 depends on which bookshelf iscurrently selected 808.

A key to the centralized selection context lies in the method by whichdata is accessed once these relationships are established. This can beappreciated in the implementation of the Get( ) Set( ) andGetSelectionitems( )methods. For example, the GetSelectionitems( )method for AvailableHouses is given by the following:

bool AvailableHouses::GetSelectionItems( const SelectionContext&context, const SelectionSet &sel, std::vector< std::pair< HDATUM,std::string > > &vItems)const  { if(SELECTIONSET(Houses) == sel) { //Return the list of houses for(int n = 0; n < m_vHouses.size( ); ++n) {vItems.push_back( std::pair< HDATUM, std::string >(n,m_vHouses[n].m_strHomeowner) ); }  return true; } int nHouse =context.GetSelection( SELECTIONSET(Houses) ); if((nHouse < 0) ||(nHouse >= m_vHouses.size( ))) return false; returnm_vHouses[nHouse].GetSelectionltems(context, sel, vItems);  }The first part of the method checks to see if the selection set beingqueried is one that this level in the data structure maintains. If so,items can be filled with appropriate data: in the example, homeownernames. Otherwise, the query may be passed on to the nested house datathat is in context. The remaining implementations of this method for theother data objects are similar. The base case is in the Book in that ifthe selection set passed is not Page, then the method simply returnsfalse since it has nowhere to pass the query.

Subsequently, the Get( ) and Set( ) defined by the IDataAccess interfacecan be similarly constructed in regard to how they compare the passeddatum with those that particular object handles. If the object canhandle that datum, it does so. If not, it passes the query on to nesteddata item that is in context. This sort of data access handling allowswidgets to be bound to the topmost data object and is never invasive tothe data hiding mechanisms employed in most aggregate types.

Extrapolation of User Interface Workflow

With reference also to FIG. 9, one useful product of having definedselection sets is a tangible user interface workflow graph. Consideringthe two widget layouts for the bookshelf example shown in FIGS. 7 and 9,of concern is how it can be determined which is better, easier to use,and a more intuitive user interface layout. This is conventionallyperformed based on good design principles and knowledge of one skilledin the art of information presentation which represents a qualitativemeasure.

FIG. 9 shows an alternative user interface layout to that shown in FIG.7. Both layouts are organized and aligned but questions may remain as tohow one determines that the layout shown in FIG. 9 is “poor” whencompared to that of FIG. 7. Such questions can be resolved by examiningthe selection set dependency of widgets. FIG. 10 numbers the widgetsbased on their associated level in the selection dependency hierarchy.FIG. 10 shows the same relationships between widgets 102 and theselection context 103 as that in FIG. 8 (data storage is not shown inthis figure). Each widget 1001-1005 can then be numbered 101 accordingto the level at which it resides in the selection dependency hierarchy.The workflow steps are then visualized by rendering the transitionsbetween selection set levels, since this equates to the steps a usermust take in order to select data.

The workflow visualizations are shown in FIG. 11 which showsvisualizations of user interface workflows for the layouts shown in FIG.7 (at 111) and FIG. 9 (at 112). The upper layout 111 guides the usermonotonically from left to right. The lower layout 112 instead requiresthe user to navigate back and forth across the layout in order totraverse the selection dependencies. Evaluation of the resultingworkflow graph as indicated by the numbers and orange arrows clearlyshows the problem with the layout shown in FIG. 9; primarily that theuser must move back and forth horizontally in order to traverse theselection hierarchy; whereas, in the layout shown in FIG. 7, the userneed only traverse monotonically from left to right. Thus, a workflowevaluation criterion could be how many times the workflow graph changesdirection; a measurable quantity in this case.

Easy-to-use user interface layouts follow cultural constructs that havebeen in place for some time. The construct that applies in this case isthat of left-to-right (or right-to-left depending upon the culturallanguage) and usually top-to-bottom organization of information. Thisordering establishes a natural progression a person follows in order toarrive at the desired result.

FIG. 12 shows the steps involved in obtaining the user interfaceworkflow in tangible form with respect to widget positions within alayout. In particular, FIG. 12 shows the steps involved in obtaining auser interface workflow graph based on the relationships betweenselection sets. The selection sets are first created and related to oneanother 1201 in order to establish the dependencies upon one another.Widgets are then attached 1202 to selection sets. Selection sets 1203can be enumerated based on the depth from the topmost selection set.Enumerating by level allows widgets 1204 to be assigned their respectivepositions in the workflow sequence. Associating 1205 this sequence withthe widget position within the layout makes the workflow graph 1206 sothat one can visualize or otherwise manipulate the workflow.

This information can be used for a variety of things such as i)automatic widget placement based on workflow; ii) layout grading orevaluation based on workflow complexity as appropriate for a givenculture; iii) visualization of the workflow; and iv) tracking toidentify which user interface components including, for example, widgetswith which a user spends their time interacting.

File Format Capture

Certain embodiments provide systems and methods for file format capture.In one example, the systems and methods are used for capturing the fileformat within computer software. The invention provides an alternativeto external maintenance of format specification detailing thebyte-by-byte sequence of data values within a file. In certainembodiments of the invention, the format specification can be capturedby the software automatically, thus eliminating the need for externalrepresentation and maintenance.

As used herein, a file format specification includes a byte-by-bytedescription of the sequence of data values stored within a file. A fileformat specification is the necessary component in data sharing betweenvendors and for any software system. Nearly every software tool has itsown native file format and many are capable of reading or writingnon-native file formats typically comprising files created by othersoftware products or vendors. To access non-native file formats, anapplication developer must implement program code that correctly readsor writes data in the proper sequence. This sequence must be absolutelycorrect for software applications to be fully compatible with oneanother. Three methods can be typically used to implement a file formatincluding:

-   -   1) Using, copying, or deriving from existing source code that        implements the file format.    -   2) Following a precise specification that describes the        byte-by-byte data sequence ultimately representing the file        format.    -   3) Guessing the file format by trial and error inspection.

Each of these methods is frequently unavailable due to various reasons.For example, an owner of the intellectual property in source code maynot want to distribute their implementation of the file format. This maybe because there is proprietary information contained within theirparticular implementation or simply the owner would have to disclose toomuch intellectual property for this to be feasible. Additionally, anapplication developer may not want to use existing source code if it isincompatible with the system to which it would be added. In anotherexample, a format specification may be unavailable due to the difficultyin creating and maintaining the specification for a complex file format.This specification can be a derivative of the source code thatimplements the file format and requires an individual to analyzeline-by-line how the source code reads or writes a file in order toreveal the byte-by-byte specification. This can be an extremely timeconsuming process for complex file formats and may need to be repeatedeach time the reading or writing mechanisms are changed. In anotherexample, guessing can be quite effective when performed iteratively.Typically an application developer creates or otherwise obtains a filestoring known data and inspects the resulting file byte-by-byte in orderto decode how the known data was written into the file. However, forcomplex file formats, it may be impossible to discover meaning for everybyte location in the file format through guessing.

These methods are described graphically in FIG. 13. FIG. 13 shows threemechanisms of implementing a file format in source code. The usual modelfor creating a file format involves an entity 1300 creating a nativefile format by implementing I/O methods in source code 1302. The sourcecode 1302 can be given directly 1309 to a third party 1319 wanting toimplement the file format. The file format user 1319 can then generate aderivative version 1310 of the provided source code for use within theirown software system 1313. When the file format originator 1300 choosesto withhold source code 1302 from the file format user 1319, theoriginator can step through the source code line by line 1303 and recordthe byte by byte sequence of data values producing the file formatspecification 1304. This can be performed manually by a person readingand recording what the 10 methods are doing. The specification 1304 thusproduced can then be given 1311 to the file format user in order forthem to follow the specification 1312 to produce their source code 1313implementing the file format. Finally, a file 1306 produced by theoriginator 1305 can be examined 1308 by the file format user 1319 byguessing the format in order to produce source code 1313 implementingthe file format.

In this example, the file format originates in source code such that thefile format specification is a derivative of the source code. In somecases, the file format specification is originated prior to the firstimplementation of source code that implements that specification. Inthis case, the source code is a derivative of the file formatspecification. However, once these two items exists, it is possible forthe source code and specification to become unsynchronized in which caseimprovements made to either will need to be reflected in the other.Thus, there exists interdependency between the source code and the fileformat specification requiring maintenance of both.

In certain embodiments of the invention the line-by-line determinationof the file format can be modified by automatically capturing fileformat information directly from the file input/output methods in thesource code. In certain embodiments, the file format specification isautomatically derived from the source code so that there is only onepoint of origination and maintenance.

In certain embodiments, write operations in source code are instrumentedsuch that the file format specification can be captured by a “dummy”file capturing object and subsequently processed to produce the filestructure specification. This process is illustrated in FIG. 14 and caninvolve provision of a layered input/output mechanism for working withfiles. A layered I/O system is commonplace in many software systems.

FIG. 14 shows manual and automated line-by-line determination of a fileformat specification from source code. This example is based onexamining the write operations in source code implementing the fileformat in question. Manual determination 1400 examines the source code1401 to find the first write operation 1402. From here, every sequentialwrite operation is tracked and recorded. Thus, the user must find thenext data value to be written 1403, record its byte location in the datasequence thus far, data type, data size, and/or description 1405. Thisis repeated for every single data item in the file format and istedious, time consuming, and error prone for complex file formats. Incontrast, the tedium is removed by automating 1440 the line-by-linedetermination. This is done by first instrumenting source code 1408write operations 1409 with descriptions as well as a mechanism to detectdata type and size. The instrumented source code 1410 is compiled into abinary executable form 1412 that is then executed and instructed towrite to a file capturing object 1413. The capturing process 1423 isautomated by the capturing object 1413 in that it can automaticallydetect when a write operation occurs 1414 and 1415 as well as themetadata (data type, size, and/or description) associated with the writeoperation 1416. When the write operation is complete 1417, the recordedresults are post-processed 1418 to produce the file format specification1419.

Typically, the capturing layer must be capable of capturing the metadataneeded to reconstruct the file format specification. This metadata caninclude data type, size, and description in addition to structural fileformat elements such as loops, objects, or file sections. Much of themetadata can be captured automatically in the intermediate layer whenimplemented. However, the basic description explaining exactly what eachdata item represents in the file format purpose may be lacking. Toaccount for this, an application file I/O method may be instrumented toobtain these descriptions. For example, from the applicationperspective, assume a write method:

int a, b, c; FileObject file; file.Write(a); file.Write(b);file.Write(c);a write method can be provided such as:

int  a, b, c; FileObject  file; file.Write(a, “Variable a”);file.Write(b, “Variable b”); file.Write(c, “Variable c”);

FIG. 15 illustrates how an intermediate capture layer fits into the fileI/O process. Typically, an application 1520 implements direct I/O 1500for a accessing a file 1503. This is facilitated by low level 1502 fileaccess methods provided by the operating system 1530. Thus, theapplication file I/O 1501 calls low level I/O methods 1502 in order toaccess the file 1503. To implement the format capturing technology, onemust have an intermediate file I/O layer 1505 capable of detecting datatypes and other metadata during the I/O process. Thus, the applicationfile I/O 1504 calls intermediate file I/O methods 1505, which in turncall low level I/O methods 1506 that ultimately access the file 1507. Itis important to note that many applications already include someintermediate layer 1505, but it does not necessarily capture themetadata needed in order to reconstruct the file format specification.Additionally, one could move the intermediate layer into the operatingsystem 1530 layer (or even a software development kit layer between theoperating system 1530 and the application 1520) as an alternative to theapplication 1520 layer.

Additional Descriptions of Certain Aspects of the Invention

Certain embodiments of the invention provide a method for maintainingcontext for a plurality of widgets, wherein the method comprisesmaintaining selection state for a plurality of widgets in a centralstorage; updating the context based on a query from one or more of theplurality of widgets; and selectively providing access to the context tothe one or more widgets. In some of these embodiments, the accessincludes access to the selection state of the corresponding one or morewidgets. In some of these embodiments, for each of the one or morewidgets, the access is provided to a selection state corresponding tothe each widget. In some of these embodiments, the updating includesupdating the selection state of the one or more widgets. In some ofthese embodiments, the selectively providing access includes permittingthe one or more widgets to directly query any needed selection withoutusing a mediator. In some of these embodiments, the selectivelyproviding access includes permitting the one or more widgets to directlyquery any needed selection without using a different widget.

In some of these embodiments, the one or more widgets communicatedirectly with the selection context. In some of these embodiments,responsive to the directly communicating, the selection context changesbased on a user interaction. Some of these embodiments further compriseproviding the one or more widgets with data. In some of theseembodiments, the providing data includes receiving an inquiry from theone or more widgets, the inquires being communicated through adata-access interface to data storage. In some of these embodiments, theproviding data includes transmitting a query to the selection contextfrom the data storage, the transmitted query prompting the return ofrelevant data to the one or more widgets.

Certain embodiments of the invention provide a method of data bindingcomprising managing selection context using at least one of a widget anddata storage. In some of these embodiments, the selection context ismaintained centrally. In some of these embodiments, the managingincludes responding to queries from the widget. In some of theseembodiments, the queries include queries directed to the entire context.In some of these embodiments, the management includes providing accessto the context from the widget. In some of these embodiments, the accessis provided to the entire context. In some of these embodiments, themanaging includes responding to queries from the data storage. In someof these embodiments, the queries include queries directed to the entirecontext. In some of these embodiments, the management includes providingaccess to the context from the data storage. In some of theseembodiments, the access is provided to the entire context.

Certain embodiments provide systems and methods for managing acentralized context comprising creating a widget using a mediator andsubsequently connecting the widget to an associated data storage. Someof these embodiments further comprise creating a central selectioncontext. Certain of these embodiments further comprise setting aninitial state for the widget within the context. Certain of theseembodiments further comprise managing selection internally at thewidget. In some of these embodiments, managing selection includesmaintaining selection state and data binding for the widget. Certain ofthese embodiments further comprise modifying the selection state inresponse to an event. In some of these embodiments, the modifyingincludes causing the widget to query the centralized context. In some ofthese embodiments, the modifying includes updating the centralizedcontext. In some of these embodiments, the modifying includes updatingthe associated data storage. In some of these embodiments, the modifyingincludes receiving updated data from the associated data storage at thewidget by querying a data access interface. In some of theseembodiments, the modifying includes causing the data access interface toquery the centralized context. In some of these embodiments, themodifying includes providing data to the widget based on a response tothe query of the data access interface.

Certain embodiments of the invention provide a method for capturing fileformats. In some of these embodiments, the line-by-line determination ofa file format can be modified by automatically capturing file formatinformation directly from the file input/output methods in the sourcecode. In some of these embodiments, the file format specification isautomatically derived from source code. In some of these embodiments,write operations in source code are instrumented such that the fileformat specification can be captured by a “dummy” file capturing objectand subsequently processed to produce the file structure specification.In some of these embodiments, a layered input/output mechanism forworking with files is provided.

In some of these embodiments, a manual examination of the source code isused to find a first write operation. In some of these embodiments,sequential write operations are tracked and recorded. In some of theseembodiments, an automatic line-by-line determination is performed. Insome of these embodiments, source code write operations are instrumentedwith descriptions and/or a mechanism to detect data type and size. Insome of these embodiments, instrumented source code is compiled into abinary executable form 212. In some of these embodiments, theinstrumented source code writes to a file capturing object. In some ofthese embodiments, the capturing object automatically detects when awrite operation occurs and identifies metadata (data type, size, and/ordescription) associated with the write operation. In some of theseembodiments, a file format specification is produced.

Certain embodiments of the invention provide methods for automaticallycapturing file format information directly from the file input/output,comprising instrumenting certain file operations to capture file formatinformation, collecting the file format information in a captured fileobject and processing the captured file object to obtain the filestructure specification.

Although the present invention has been described with reference tospecific exemplary embodiments, it will be evident to one of ordinaryskill in the art that various modifications and changes may be made tothese embodiments without departing from the broader spirit and scope ofthe invention. Accordingly, the specification and drawings are to beregarded in an illustrative rather than a restrictive sense.

What is claimed is:
 1. A method implemented by a computer forautomatically capturing file format information directly from the fileinput/output, comprising: modifying source code corresponding to certainfile operations so as to cause the certain file operations to capturefile format information; collecting, by the computer, the file formatinformation during execution of the certain file operations in acaptured file object; and processing the captured file object to obtainthe file structure specification.
 2. The method of claim 1, whereinprocessing includes printing the file structure specification into aspecification document.
 3. The method of claim 1, wherein collecting thefile format information comprises performing an automatic line-by-linedetermination of the file format.
 4. The method of claim 1, whereinmodifying source code includes instrumenting write operations such thatthe file format specification is captured by a dummy file capturingobject.
 5. The method of claim 4, wherein processing includes processingthe dummy file capturing object to produce the file structurespecification.
 6. The method of claim 1, further comprising providing alayered input/output mechanism for working with files.
 7. The method ofclaim 4, wherein instrumenting includes instrumenting the writeoperations with descriptions and/or a mechanism to detect data type andsize.
 8. The method of claim 4, wherein the capturing objectautomatically detects when a write operation occurs and identifiesmetadata associated with the write operation.
 9. The method of claim 8,wherein the metadata includes one or more of data type, size, anddescription.
 10. A method implemented by a computer for automaticallycapturing file format information directly from the file input/output,comprising: modifying source code corresponding to certain file readoperations so as to cause the certain file read operations to capturefile format information; collecting, by the computer, the file formatinformation during execution of the certain file operations in acaptured file object; and processing the captured file object to obtainthe file structure specification.
 11. The method of claim 10, whereinprocessing includes printing the file structure specification into aspecification document.
 12. The method of claim 10, wherein collectingthe file format information comprises performing an automaticline-by-line determination of the file format.
 13. The method of claim10, wherein modifying source code includes instrumenting the file readoperations such that the file format specification is captured by adummy file capturing object.
 14. The method of claim 13, whereinprocessing includes processing the dummy file capturing object toproduce the file structure specification.
 15. The method of claim 10,further comprising providing a layered input/output mechanism forworking with files.
 16. The method of claim 13, wherein instrumentingincludes instrumenting the file read operations with descriptions and/ora mechanism to detect data type and size.
 17. The method of claim 13,wherein the capturing object automatically detects when a file readoperation occurs and identifies metadata associated with the file readoperation.
 18. The method of claim 17, wherein the metadata includes oneor more of data type, size, and description.